<?php
	require_once(dirname(__FILE__).'/dados.php');
	// ################################
	// # Classe com funções de Cookie #
	// ################################
	class Cookie
	{
		public $prefix;
		public $expire;
		public $path;
		
		// $prefix é o prefixo ou nome do cookie, ou seja, é como ele será identificado no array $_COOKIE
		// $tempo_existencia define quanto tempo cada cookie existirá, 24*60*60 = 86400,
		// assim essa constante define que o tempo de existência é de um dia
		// $path_existencia define aonde o cookie ficará disponível, o valor '/' definie que é o domínio todo
		public function __construct($prefix = 'cookie_nome_default', $tempo_existencia = 86400, $path_existencia = '/' )
		{
			$this->prefix = $prefix;
			$this->expire = time() + $tempo_existencia;
			$this->path = $path_existencia;
		}
		
		// Métodos publicos
		
		public function destroy()
		{
			setcookie($this->prefix, "", time()-3600);
		}
		
		// Overloading
		
		// Se não existe na classe Session, atribui no array de session
		public function __set($name, $value) 
		{
	        if(!setcookie($this->prefix."[$name]" , $value, $this->expire, $this->path))
	        {
	        	$trace = debug_backtrace();
		        trigger_error(
		            "Erro na hora de setar o cookie $this->prefix com a chave " . $name .
		            ' no arquivo ' . $trace[0]['file'] .
		            ' na linha ' . $trace[0]['line'],
		            E_USER_NOTICE);
	        }
	    }
	    
		// Se não existe na classe Session, retorna o valor, pegando do array de session
	    public function __get($name) 
	    {
	        if (array_key_exists($name, $_COOKIE[$this->prefix])) 
	        {
	            return $_COOKIE[$this->prefix][$name];
	        }
	
	        $trace = debug_backtrace();
	        trigger_error(
	            "Erro na hora de pegar o cookie $this->prefix com a chave " . $name .
	            ' no arquivo ' . $trace[0]['file'] .
	            ' na linha ' . $trace[0]['line'],
	            E_USER_NOTICE);
	        return null;
	    }
	
	    // Verifica se a variável existe no cookie
	    public function __isset($name) 
	    {
	        return isset($_COOKIE[$this->prefix][$name]);
	    }
	    
	    // Retira a variável do cookie
	    public function __unset($name) 
	    {
	        unset($_COOKIE[$this->prefix][$name]);
	    }
	}

?>